home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1810 / 1810.xpi / components / showcase-clhandler.js
Text File  |  2006-12-09  |  9KB  |  271 lines

  1. /*
  2.  * -showcase commandline handler; starts up Showcase.
  3.  */
  4.  
  5. const nsIAppShellService = Components.interfaces.nsIAppShellService;
  6. const nsISupports = Components.interfaces.nsISupports;
  7. const nsICategoryManager = Components.interfaces.nsICategoryManager;
  8. const nsIComponentRegistrar = Components.interfaces.nsIComponentRegistrar;
  9. const nsICommandLine = Components.interfaces.nsICommandLine;
  10. const nsICommandLineHandler = Components.interfaces.nsICommandLineHandler;
  11. const nsIFactory = Components.interfaces.nsIFactory;
  12. const nsIModule = Components.interfaces.nsIModule;
  13. const nsIWindowWatcher = Components.interfaces.nsIWindowWatcher;
  14.  
  15.  
  16. var consoleService = Components
  17. .classes['@mozilla.org/consoleservice;1']
  18. .getService( Components.interfaces.nsIConsoleService );
  19.  
  20. function recordMessage( message ) {
  21. consoleService.logStringMessage("showcase: " + message + "\n");
  22. }
  23.  
  24.  
  25. /*
  26. * Classes
  27. */
  28.  
  29. const showcaseHandler = {
  30. /* nsISupports */
  31. QueryInterface : function clh_QI(iid) {
  32. if (iid.equals(nsICommandLineHandler) ||
  33. iid.equals(nsIFactory) ||
  34. iid.equals(nsISupports))
  35. return this;
  36.  
  37. throw Components.results.NS_ERROR_NO_INTERFACE;
  38. },
  39.  
  40. /* nsICommandLineHandler */
  41.  
  42. handle : function clh_handle(cmdLine) {
  43. var args = new Object();
  44. args.urlopt = false;
  45. try {
  46. var uristr = cmdLine.handleFlagWithParam("showcase", false);
  47. if (uristr) {
  48. args.urlopt = true;
  49. args.url = uristr;
  50. }
  51. }
  52. catch (e) {
  53. }
  54.  
  55. if (args.urlopt || cmdLine.handleFlag("showcase", false)) {
  56. var appShellClass = Components.classes[ "@mozilla.org/appshell/appShellService;1" ];
  57. var appShellService = appShellClass.getService(nsIAppShellService);
  58. var hiddenWin = appShellService.hiddenDOMWindow;
  59. /*
  60. A XULWindow man be better than a DOMWindow
  61. var hiddenWin = appShellService.hiddenWindow;
  62. */
  63.  
  64. // Call showcase
  65. showShowcase(hiddenWin);
  66.  
  67. cmdLine.preventDefault = true;
  68.  
  69. }
  70. },
  71.  
  72. helpInfo : " -showcase Open Showcase.\n",
  73.  
  74. /* nsIFactory */
  75.  
  76. createInstance : function clh_CI(outer, iid) {
  77. if (outer != null)
  78. throw Components.results.NS_ERROR_NO_AGGREGATION;
  79.  
  80. return this.QueryInterface(iid);
  81. },
  82.  
  83. lockFactory : function clh_lock(lock) {
  84. /* no-op */
  85. }
  86. };
  87.  
  88. const clh_contractID = "@mozilla.org/commandlinehandler/general-startup;1?type=showcase";
  89. const clh_CID = Components.ID("{35bcd621-c5bc-4c54-ac4e-4ea886ab2887}");
  90. const clh_category = "c-showcase";
  91.  
  92. const showcaseHandlerModule = {
  93. /* nsISupports */
  94.  
  95. QueryInterface : function mod_QI(iid) {
  96. if (iid.equals(nsIModule) ||
  97. iid.equals(nsISupports))
  98. return this;
  99.  
  100. throw Components.results.NS_ERROR_NO_INTERFACE;
  101. },
  102.  
  103. /* nsIModule */
  104.  
  105. getClassObject : function mod_gch(compMgr, cid, iid) {
  106. if (cid.equals(clh_CID))
  107. return showcaseHandler.QueryInterface(iid);
  108.  
  109. throw Components.results.NS_ERROR_NOT_REGISTERED;
  110. },
  111.  
  112. registerSelf : function mod_regself(compMgr, fileSpec, location, type) {
  113. compMgr.QueryInterface(nsIComponentRegistrar);
  114.  
  115. compMgr.registerFactoryLocation(clh_CID,
  116. "showcaseHandler",
  117. clh_contractID,
  118. fileSpec,
  119. location,
  120. type);
  121.  
  122. var catMan = Components.classes["@mozilla.org/categorymanager;1"]
  123. .getService(nsICategoryManager);
  124. catMan.addCategoryEntry("command-line-handler",
  125. clh_category,
  126. clh_contractID, true, true);
  127. },
  128.  
  129. unregisterSelf : function mod_unreg(compMgr, location, type) {
  130. compMgr.QueryInterface(nsIComponentRegistrar);
  131.  
  132. compMgr.unregisterFactoryLocation(clh_CID, location);
  133.  
  134. var catMan = Components.classes["@mozilla.org/categorymanager;1"]
  135. .getService(nsICategoryManager);
  136. catMan.deleteCategoryEntry("command-line-handler", clh_category);
  137. },
  138.  
  139. canUnload : function (compMgr) {
  140. return true;
  141. }
  142. };
  143.  
  144. /* module initialisation */
  145. function NSGetModule(comMgr, fileSpec) {
  146. return showcaseHandlerModule;
  147. }
  148.  
  149. function showShowcase(targetWindow) {
  150.       var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  151.                     getService(Components.interfaces.nsIPrefService);
  152.       prefs = prefs.getBranch("extensions.showcase.");
  153.  
  154.       // First close the window so we can keep the "last position" and "last size" values
  155.         var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
  156.         var windowIter = wm.getEnumerator('extension:showcase');
  157.         if (windowIter.hasMoreElements()) {
  158.           var targetWindow = windowIter.getNext();
  159.           if (targetWindow.wrappedJSObject) targetWindow = targetWindow.wrappedJSObject;
  160.  
  161.           if (targetWindow) {
  162.             var shouldRefresh = false;
  163.             if (allWindows) {
  164.               if (!targetWindow.globalMode) {
  165.                 targetWindow.globalMode = true;
  166.                 shouldRefresh = true;
  167.               }
  168.             } else {
  169.               if (targetWindow.globalMode) {
  170.                 targetWindow.globalMode = false;
  171.                 targetWindow.localTargetWindow = window;
  172.                 shouldRefresh = true;
  173.               } else {
  174.                 if ((targetWindow.localTargetWindow && (targetWindow.localTargetWindow != window)) || 
  175.                     (!targetWindow.localTargetWindow && (window.opener != window))) {
  176.                   targetWindow.localTargetWindow = window;
  177.                   shouldRefresh = true;
  178.                 }
  179.               }
  180.             }
  181.             if (shouldRefresh)
  182.               targetWindow.refreshScreen();
  183.  
  184.             targetWindow.focus();
  185.             return;
  186.           }
  187.         }
  188.  
  189.       var windowHeight, windowWidth;
  190.       var createWindowString = "chrome";
  191.       
  192.       var showcaseWidthType = prefs.getIntPref("windowWidth");
  193.       var widthPercentage = parseFloat(prefs.getCharPref("windowWidthPercentage"));
  194.       var widthModifier = prefs.getIntPref("windowWidthModifier");
  195.  
  196.       createWindowString += ",outerWidth=";
  197.  
  198.       if ((showcaseWidthType == 0) || (showcaseWidthType == 1) || (showcaseWidthType == 3) || (showcaseWidthType == 4)) {
  199.         windowWidth = Math.floor(targetWindow.screen.availWidth * widthPercentage / 100 + widthModifier);
  200.         createWindowString += windowWidth;
  201.       } else { // if (showcaseWidthType == 2)
  202.         windowWidth = prefs.getIntPref("windowLastWidth");
  203.         createWindowString += windowWidth;
  204.         if (windowWidth < 1) {
  205.           windowWidth = 300;
  206.         }
  207.       }
  208.  
  209.       var showcaseHeightType = prefs.getIntPref("windowHeight");
  210.       var heightPercentage = parseFloat(prefs.getCharPref("windowHeightPercentage"));
  211.       var heightModifier = prefs.getIntPref("windowHeightModifier");
  212.  
  213.       createWindowString += ",outerHeight=";
  214.  
  215.       if ((showcaseHeightType == 0) || (showcaseHeightType == 1) || (showcaseHeightType == 3) || (showcaseHeightType == 4)) {
  216.         windowHeight = Math.floor(targetWindow.screen.availHeight * heightPercentage / 100 + heightModifier);
  217.         createWindowString += windowHeight;
  218.       } else { // if (showcaseHeightType == 2)
  219.         windowHeight = prefs.getIntPref("windowLastHeight");
  220.         if (windowHeight < 1) {
  221.           windowHeight = 300;
  222.         }
  223.         createWindowString += windowHeight;
  224.       }
  225.       
  226.       if (prefs.getBoolPref("windowAttributeDialog")) {
  227.         createWindowString += ",dialog=yes";
  228.       } else {
  229.         createWindowString += ",dialog=no";
  230.       }
  231.       
  232.       if (prefs.getBoolPref("windowAttributeDependent")) {
  233.         createWindowString += ",dependent=yes";
  234.       }
  235.  
  236.       if (!prefs.getBoolPref("windowAttributeTitleBar")) {
  237.         createWindowString += ",titlebar=no";
  238.       }
  239.  
  240.       if (prefs.getBoolPref("windowAttributeModal")) {
  241.         createWindowString += ",modal=yes";
  242.       }
  243.  
  244.       if (prefs.getBoolPref("windowAttributeAlwaysRaised")) {
  245.         createWindowString += ",alwaysRaised=yes";
  246.       }
  247.  
  248.       var showcasePosition = prefs.getIntPref("windowPosition");
  249.       if ((showcasePosition == 1) || (showcasePosition == 0) || (showcasePosition == 3) || (showcasePosition == 4)) {
  250.         // Center on current screen
  251.         createWindowString += ",centerscreen=yes";
  252.       } else if (showcasePosition == 2) {
  253.         // Remember last position
  254.         createWindowString += ",left=" + 
  255.          prefs.getIntPref("windowLastX") +
  256.          ",top=" +
  257.          prefs.getIntPref("windowLastY");
  258.       }
  259.  
  260.       // Add "normal" parameters
  261.       createWindowString += ",close=yes,resizable=yes";
  262.       
  263.       var showcaseURL = "chrome://showcase/content/showcase.xul?global=true";
  264.       var showcaseWindow = targetWindow.openDialog(showcaseURL,
  265.         "showcaseDialog", createWindowString, targetWindow);
  266.  
  267.       // Try to focus on new window (will fail if window is modal, but that's not an issue)
  268.       try {
  269.         showcaseWindow.focus();
  270.       } catch (e) {}
  271. }